//主题类，保存状态，状态发生变动时会通知所有的观察者
class Subject {
    constructor(){
        this.status = 0
        this.observers = []
    }
    getStatus(){
        return this.status
    }
    setStatus(status){
        this.status = status
        //同时通知观察者
        this.notifyAllObservers()
    }
    notifyAllObservers(){
        //遍历一遍观察者列表进行推送
        this.observers.forEach(observer => {
            //调用观察者的方法
            observer.update()
        })
    }

    //将观察者加入列表中
    attach(observer){
        this.observers.push(observer)
    }
}

class Observer{
    constructor(name,subject){
        this.name = name
        this.subject = subject
        this.subject.attach(this)
    }
    update(){
        console.log("-------开启观察者模式-------")
        console.log(`${this.name}update,status:${this.subject.getStatus()}`)
    }
}

let s= new Subject()
let o1 = new Observer('o1',s)
let o2 = new Observer('o2',s)

//更改状态:
s.setStatus(1)

export default {
    Observer
}